home *** CD-ROM | disk | FTP | other *** search
/ Suzy B Software 2 / Suzy B Software CD-ROM 2 (1994).iso / extras / falcon / scrdump / source / start.s < prev    next >
Text File  |  1995-04-27  |  4KB  |  179 lines

  1.     XDEF errno            ; macht den linker glücklich, steht sonst im startupcode
  2.     XREF do_althelp
  3.     XDEF dump;
  4.     XREF make_name
  5.     XREF store_img
  6.  
  7.     even
  8.  
  9. * Base page structure
  10.     .OFFSET 0
  11. TpaStart:        .DS.L   1
  12. TpaEnd:            .DS.L   1
  13. TextSegStart:    .DS.L   1
  14. TextSegSize:    .DS.L   1
  15. DataSegStart:    .DS.L   1
  16. DataSegSize:    .DS.L   1
  17. BssSegStart:    .DS.L   1
  18. BssSegSize:        .DS.L   1
  19. DtaPtr:            .DS.L   1
  20. PntPrcPtr:        .DS.L   1
  21. Reserved0:        .DS.L   1
  22. EnvStrPtr:        .DS.L   1
  23. Reserved1:        .DS.B   7
  24. CurDrv:            .DS.B   1
  25. Reserved2:        .DS.L   18
  26. CmdLine:        .DS.B   128
  27. BasePageSize:    .DS     0
  28.  
  29. _p_cookies        equ        $5a0
  30. cookie            equ        'SDMP'
  31.  
  32.         TEXT
  33.  
  34.             BRA        do_init
  35.  
  36. ;
  37. ;    voreinstellungen/struktur auf die cookie zeigt
  38. ;
  39. dump:        DC.L    'TMMW'
  40.             DC.B    "C:\TEMP\SCRDUMP\SCR",0,"                    "
  41.             DC.B    0
  42.         even
  43.             DC.W    0
  44.             DC.L    make_name
  45.             DC.L    store_img
  46. ;
  47. ; initialisierung
  48. ;
  49. do_init:    MOVEA.L    4(A7),A5    ; base-page-pointer
  50.             MOVEA.L    #uss,A7
  51.  
  52.             PEA        initstring
  53.             MOVE.W    #9,-(A7)
  54.             TRAP     #1            ; meldung auf screen
  55.             ADDQ.L    #6,A7
  56.  
  57.             PEA        init
  58.             MOVE.W    #$26,-(A7)
  59.             TRAP     #14            ; superexec
  60.             ADDQ.L    #6,A7
  61.  
  62.             TST.W    D0            ; fehler ?
  63.             BEQ        quit
  64.  
  65.             CLR.W    -(A7)
  66.             MOVE.L  TextSegSize(A5),A0
  67.             ADD.L   DataSegSize(A5),A0
  68.             ADD.L   BssSegSize(A5),A0
  69.             ADD.W   #BasePageSize,A0
  70.             MOVE.L    A0,-(A7)
  71.             MOVE.W    #$31,-(A7)
  72.             TRAP     #1            ; ptermres
  73.     
  74. quit:         PEA        error
  75.             MOVE.W    #9,-(A7)
  76.             TRAP     #1            ; fehlermeldung raus
  77.             ADDQ.L    #6,A7
  78.                                 
  79.             MOVE.W    #0,-(A7)    ; und beenden
  80.             TRAP     #1            ; pterm0
  81.  
  82. ;
  83. ;    vbl eintragen 
  84. ;        cookie anlegen
  85. ;        kbshift-flag adresse ermittlen
  86. ;    (wird im supervisor-modus aufgerufen)
  87. ;           
  88. init:         MOVE.W    $454,D0
  89.             LSL.W    #2,D0
  90.             MOVE.L    $456,A0
  91.             MOVEQ    #4,D1        ; ersten eintrag auslassen
  92. sloop:        TST.L    0(A0,D1)
  93.             BEQ.B    found_
  94.             ADDQ.W    #4,D1
  95.             CMP.W    D0,D1        ; genial ist die schleife aber nicht!!!
  96.             BNE.B    sloop        ; warum nicht d0 runterzählen, A0 um 4 erhöhen?
  97.  
  98.             CLR.W    D0            ; war wohl nichts
  99.             RTS                    ; ganzer vbl belegt, da kann man nichts machen
  100.  
  101. found_:        LEA        vbl,A1
  102.             MOVE.L    A1,0(A0,D1)
  103.  
  104. ; kb_shift-adresse ermitteln
  105.  
  106.             MOVE.L    $4F2,A0        ; sysbase
  107.             CLR.L    kbshift
  108.             CMP.W    #$0104,2(A0)    ; versionsnummer
  109.             BLT        no_kbshift
  110.             MOVE.L    36(A0),kbshift    ; kbshift-adresse merken (TOS1.4 required!!)
  111.  
  112. ; cookie eintragen
  113. no_kbshift:    MOVEA.L    _p_cookies,A0
  114.             BEQ        end_cookie    ; kann keinen neuer jar erzeugen
  115.             CLR.W    D0
  116. .c_loop:    TST.L    (A0)    
  117.             BEQ        .found
  118.             ADDA.W    #8,A0
  119.             ADDQ.W    #1,D0
  120.             BRA        .c_loop
  121. .found:        MOVE.L    4(A0),D1
  122.             CMP.W    D0,D1
  123.             BLT        end_cookie    ; passt nichts mehr rein
  124.             MOVE.L    (A0),8(A0)
  125.             MOVE.L    4(A0),12(A0)
  126.             MOVE.L    #cookie,(A0)
  127.             MOVE.L    #dump,4(A0)
  128.  
  129. end_cookie:    MOVEQ    #1,D0        ; war erfolgreich
  130.             RTS
  131.  
  132. ;
  133. ;            vbl-routine
  134. ;
  135. ;    ALT HELP        -> do_althelp für screendump aufrufen
  136. ;    CTRL ALT HELP     -> nichts tun (-> tos-hcopy)
  137. ;    
  138.  
  139. vbl:        TST.W    $4EE         ; dumpflag ?
  140.             BNE        end_vbl
  141.  
  142.             movea.l    kbshift,a0
  143.             tst.l    a0
  144.             BEQ        notest
  145.             btst    #2,(a0)        ; ctrl ??
  146.             bne        end_vbl        ; dann nichts tun
  147.  
  148. notest:        move.w    #-1,$4EE    ; habs gelesen
  149.             sub.l    #46,$4A2
  150.             jsr        do_althelp    ; speichern
  151.             add.l    #46,$4A2
  152. end_vbl:    rts
  153.  
  154. kbshift:    DC.L        0
  155.  
  156.         DATA
  157.  
  158. error:        dc.b     '  kein VBL-Slot frei, nicht installiert '
  159.             dc.b     $0a,$0d,0
  160.  
  161.         even
  162.  
  163. initstring: dc.b    $0A,$0D
  164.             dc.b     $0A,$0D,$1B,'p'
  165.             dc.b     '  Extended ALT-HELP  v1.0  10. 4.1994  ',$0a,$0d,$1B,'q'
  166. ;                     123456789012345678901234567890123456789
  167.             dc.b     '    ALT-HELP     : GEM-IMG Screendump',$0a,$0d
  168.             dc.b     '    CTRL-ALT-HELP: TOS Hardcopy',$0a,$0d
  169.             dc.b     '  (c) 1994 by TMMW Morus Walter',$0a,$0d
  170.             dc.b     $0a,$0d,0
  171.  
  172.         even
  173.  
  174.             ds.l     2        ; stack für init (wird schon reichen)
  175. uss:        dc.l     0        ; überschreibt sonst eh nur die message
  176.  
  177. errno:        DC.W    0
  178.  
  179.